﻿using System;
using RanbuOM.Common;
using RanbuOM.Serialization;

namespace RanbuOM.SSF4.BCM
{
    public class BcmMove : NamedDataTypeBase
    {
        public enum PositionRestrictionOption : ushort
        {
            None = 0,
            FurtherThan = 1,
            CloserThan = 2,
            HigherThan = 3,
            LowerThan = 4
        }

        [DataProperty]
        public Keys Keys { get; set; }
        
        [DataProperty]
        public KeyFlags MoveFlags { get; set; }
        
        [DataProperty]
        public PositionRestrictionOption PositionRestriction { get; set; }

        [DataProperty]
        public UInt16 MoveRestriction { get; set; }

        [DataProperty]
        public UInt16 Unknown1 { get; set; }

        [DataProperty]
        public UInt16 StateRestriction { get; set; }

        [DataProperty]
        public UInt32 MiscRestriction { get; set; }

        [DataProperty]
        public UInt32 UltraRestriction { get; set; }

        [DataProperty]
        public Single PosRestrictionDist { get; set; }

        [DataProperty]
        public Int16 EXReq { get; set; }

        [DataProperty]
        public Int16 EXCost { get; set; }

        [DataProperty]
        public Int16 UCReq { get; set; }

        [DataProperty]
        public Int16 UCCost { get; set; }

        [DataProperty]
        public Int32 InputSequenceID { get; set; }

        [DataProperty]
        public Int32 ScriptID { get; set; }

        [DataProperty]
        public UInt32 Features { get; set; }

        [DataProperty]
        public Single CpuRangeMin { get; set; }

        [DataProperty]
        public Single CpuRangeMax { get; set; }

        [DataProperty]
        public UInt32 Unknown2 { get; set; }

        [DataProperty]
        public UInt16 Unknown3 { get; set; }

        [DataProperty(SizeConst = 13)]
        public UInt16[] CpuMatrix { get; set; }
    }
}
